package br.com.cinesystem.control;

import br.com.cinesystem.entity.Cinema;
import br.com.cinesystem.entity.Cliente;
import br.com.cinesystem.entity.Endereco;
import br.com.cinesystem.entity.Genero;
import br.com.cinesystem.entity.Usuario;
import br.com.cinesystem.persistence.CinemaDao;
import br.com.cinesystem.persistence.ClienteDao;
import br.com.cinesystem.persistence.EnderecoDao;
import br.com.cinesystem.persistence.GeneroDao;
import br.com.cinesystem.persistence.UsuarioDao;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class ManterCliente extends HttpServlet {
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=ISO-8859-1");
        String cmd = request.getParameter("cmd");

        PrintWriter out = response.getWriter();

        if (cmd != null){
        
            if (cmd.equals("cadastrar")){
                EnderecoDao e = null;
                UsuarioDao d = null;
                ClienteDao cd = null;
                
                String destino = "cadastro_cliente.jsp";

                HttpSession session = request.getSession(true);

                Usuario us = (Usuario) request.getSession().getAttribute("sessao");

                if(us!=null){

                    if(us.getPerfil().equals(1)){
                        destino = "cliente/cadastro_cliente.jsp";
                    }
                    if(us.getPerfil().equals(2)){
                        destino = "cliente.do?cmd=form";
                    }
                    if(us.getPerfil().equals(3)){
                        destino = "cliente.do?cmd=form";
                    }

                }

                try{
                    if(request.getParameter("nome").isEmpty()){

                        throw new Exception("*Nome é um campo obrigatório!");

                    }else{
                        if(request.getParameter("senha1").isEmpty()){

                           throw new Exception("*Senha é um campo obrigatório!");

                        }else{
                            if(request.getParameter("senha2").isEmpty()){

                               throw new Exception("*Repetir Senha é um campo obrigatório!");

                            }else{
                                if(request.getParameter("sexo").isEmpty()){

                                    throw new Exception("*Sexo é um campo obrigatório!");

                                }else{
                                    if(request.getParameter("cpf").isEmpty()){

                                        throw new Exception("*CPF é um campo obrigatório!");

                                    }else{
                                        if(request.getParameter("rg").isEmpty()){

                                            throw new Exception("*RG é um campo obrigatório!");

                                        }else{
                                            if(request.getParameter("nasc").isEmpty()){

                                                throw new Exception("*Data de Nascimento é um campo obrigatório!");

                                            }else{
                                                if(request.getParameter("logradouro").isEmpty()){

                                                   throw new Exception("*Logradouro é um campo obrigatório!");

                                                }else{
                                                    if(request.getParameter("numero").isEmpty()){

                                                        throw new Exception("*Número é um campo obrigatório!");

                                                    }else{
                                                        if(request.getParameter("cep").isEmpty()){

                                                            throw new Exception("*CEP é um campo obrigatório!");

                                                        }else{
                                                            if(request.getParameter("bairro").isEmpty()){

                                                                throw new Exception("*Bairro é um campo obrigatório!");

                                                            }else{
                                                                if(request.getParameter("cidade").isEmpty()){

                                                                    throw new Exception("*Cidade é um campo obrigatório!");

                                                                }else{
                                                                    if(request.getParameter("estado").isEmpty()){

                                                                        throw new Exception("*Estado é um campo obrigatório!");

                                                                    }else{
                                                                        if(request.getParameter("cinema").isEmpty()){

                                                                            throw new Exception("*Cinema Favorito é um campo obrigatório!");

                                                                        }else{
                                                                            if(request.getParameter("Genero").isEmpty()){

                                                                                throw new Exception("*Gênero Favorito é um campo obrigatório!");

                                                                            }else{

                                                                                String senha1 = request.getParameter("senha1");
                                                                                String senha2 = request.getParameter("senha2");

                                                                                if(!senha1.equals(senha2)){
                                                                                    throw new Exception("*A senha digitada não confere.");
                                                                                }
                                                                                else{
                                                                                    d=new UsuarioDao();


                                                                                    //d.abrirConexao();

                                                                                    if(d.loginExistente(request.getParameter("email"))){

                                                                                        throw new Exception("*Email já cadastrado, tente outro.");

                                                                                    }
                                                                                    else{
                                                                                        e=new EnderecoDao();
                                                                                        Endereco endereco = new Endereco();
                                                                                        cd = new ClienteDao();

                                                                                      //  e.abrirConexao();
                                                                                      //  cd.abrirConexao();

                                                                                        endereco.setLogradouro(request.getParameter("logradouro"));
                                                                                        endereco.setNumero(request.getParameter("numero"));
                                                                                        endereco.setComplemento(request.getParameter("complemento"));
                                                                                        endereco.setCep(request.getParameter("cep"));
                                                                                        endereco.setBairro(request.getParameter("bairro"));
                                                                                        endereco.setCidade(request.getParameter("cidade"));
                                                                                        endereco.setEstado(request.getParameter("estado"));

                                                                                        Endereco end = e.pesquisarEndereco(endereco);

                                                                                        String data = request.getParameter("nasc");

                                                                                        String vetor[] = data.split("/");
                                                                                        Date datanasc = new Date(vetor[1]+"/"+vetor[0]+"/"+vetor[2]);

                                                                                        Usuario u = new Usuario();

                                                                                        u.setEndereco(new Endereco());

                                                                                        u.setNome(request.getParameter("nome"));
                                                                                        u.setSexo(request.getParameter("sexo"));
                                                                                        u.setDataNascimento(datanasc);
                                                                                        u.setCpf(request.getParameter("cpf"));
                                                                                        u.setRg(request.getParameter("rg"));
                                                                                        u.setEmail(request.getParameter("email"));
                                                                                        u.setSenha(request.getParameter("senha1"));
                                                                                        u.setPerfil(Integer.parseInt(request.getParameter("perfil")));

                                                                                        if(end!=null){

                                                                                            u.getEndereco().setIdEndereco(end.getIdEndereco());
                                                                                            u.getEndereco().setLogradouro(end.getLogradouro());
                                                                                            u.getEndereco().setNumero(end.getNumero());
                                                                                            u.getEndereco().setComplemento(end.getComplemento());
                                                                                            u.getEndereco().setCep(end.getCep());
                                                                                            u.getEndereco().setBairro(end.getBairro());
                                                                                            u.getEndereco().setCidade(end.getCidade());
                                                                                            u.getEndereco().setEstado(end.getEstado());

                                                                                        }else{

                                                                                            u.getEndereco().setLogradouro(request.getParameter("logradouro"));
                                                                                            u.getEndereco().setNumero(request.getParameter("numero"));
                                                                                            u.getEndereco().setComplemento(request.getParameter("complemento"));
                                                                                            u.getEndereco().setCep(request.getParameter("cep"));
                                                                                            u.getEndereco().setBairro(request.getParameter("bairro"));
                                                                                            u.getEndereco().setCidade(request.getParameter("cidade"));
                                                                                            u.getEndereco().setEstado(request.getParameter("estado"));

                                                                                            Endereco ende = e.salvar(u.getEndereco());

                                                                                            u.getEndereco().setIdEndereco(ende.getIdEndereco());

                                                                                        }

                                                                                        Usuario usuario = d.salvar(u);

                                                                                        Cliente c = new Cliente();

                                                                                        c.setGenero(new Genero());
                                                                                        c.setCinema(new Cinema());
                                                                                        c.setUsuario(new Usuario());

                                                                                        c.getCinema().setIdCinema(Integer.parseInt(request.getParameter("cinema")));
                                                                                        c.getGenero().setIdGenero(Integer.parseInt(request.getParameter("genero")));
                                                                                        c.getUsuario().setIdUsuario(usuario.getIdUsuario());

                                                                                        cd.salvar(c);

                                                                                        if(us!=null){

                                                                                            if(us.getPerfil().equals(1)){
                                                                                                destino = "cliente/home.jsp";
                                                                                            }
                                                                                            if(us.getPerfil().equals(2)){
                                                                                                destino = "cliente.do?cmd=listar";
                                                                                            }
                                                                                            if(us.getPerfil().equals(3)){
                                                                                                destino = "cliente.do?cmd=listar";
                                                                                            }

                                                                                        }
                                                                                        request.setAttribute("mensagem", "*Usuário cadastrado com sucesso.");

                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                }catch (Exception exc){
                    
                    request.setAttribute("mensagem", exc.getMessage());

                }
                finally{
                    request.getRequestDispatcher(destino).forward(request, response);
                }
            }

            if (cmd.equals("listar")){

                    UsuarioDao ud = null;
                    String destino = "admin/cliente.jsp";

                    HttpSession session = request.getSession(true);

                    Usuario us = (Usuario) request.getSession().getAttribute("sessao");

                    if(us!=null){

                        if(us.getPerfil().equals(1)){
                            destino = "filme.do?cmd=home";
                        }
                        if(us.getPerfil().equals(2)){
                            destino = "funcionario/cliente.jsp";
                        }
                        if(us.getPerfil().equals(3)){
                            destino = "admin/cliente.jsp";
                        }

                    }
                    try{

                        ud = new UsuarioDao();
                        int num1 = 1;
                        int num2 = 1;
                        List<Usuario> lista = ud.buscarTodos(num1,num2);
                        

                        request.setAttribute("clientes", lista);

                        
                        request.getRequestDispatcher(destino).forward(request, response);
                        
                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }

                }

            if(cmd.equals("buscar")){

                UsuarioDao ud = new UsuarioDao();
                ClienteDao cd = new ClienteDao();
                GeneroDao gd = new GeneroDao();
                CinemaDao cind = new CinemaDao();

                String destino = "index.jsp";

                HttpSession session = request.getSession(true);

                Usuario us = (Usuario) request.getSession().getAttribute("sessao");

                if(us!=null){

                    if(us.getPerfil().equals(1)){
                        destino = "cliente/alterar_cliente.jsp";
                    }
                    if(us.getPerfil().equals(2)){
                        destino = "funcionario/alterar_cliente.jsp";
                    }
                    if(us.getPerfil().equals(3)){
                        destino = "admin/alterar_cliente.jsp";
                    }

                }

                try{

                    Usuario u =  new Usuario();
                    u.setIdUsuario(Integer.parseInt(request.getParameter("id")));

                    Usuario usuario = ud.buscar(u);

                    if(usuario!=null){

                    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                    String data = sdf.format(usuario.getDataNascimento());
                    
                    Cliente cliente = cd.buscar(usuario.getIdUsuario());

                    request.setAttribute("dataNascimento", data);
                    request.setAttribute("cinemas", cind.buscarTodos());
                    request.setAttribute("generos", gd.BuscarTodosGeneros());
                    request.setAttribute("cliente", cliente);
                    request.setAttribute("usuario", usuario);
                    }else{
                        throw new Exception("*Você deve ser cadastrado e estar logado!");
                    }
                    
                }catch (Exception exc){

                    request.setAttribute("mensagem", exc.getMessage());

                }finally{
                    
                    request.getRequestDispatcher(destino).forward(request, response);
                    
                }

            }


            if(cmd.equals("alterar")){

                EnderecoDao ed = new EnderecoDao();
                UsuarioDao ud = new UsuarioDao();
                ClienteDao cd = new ClienteDao();

                String destino = "cliente.do?cmd=buscar&id="+request.getParameter("idcliente");
                HttpSession session = request.getSession(true);
                              
                try{
                    if(request.getParameter("nome").isEmpty()){

                        throw new Exception("*Nome é um campo obrigatório!");

                    }else{
                        if(request.getParameter("senha1").isEmpty()){

                           throw new Exception("*Senha é um campo obrigatório!");

                        }else{
                            if(request.getParameter("senha2").isEmpty()){

                               throw new Exception("*Repetir Senha é um campo obrigatório!");

                            }else{
                                if(request.getParameter("sexo").isEmpty()){

                                    throw new Exception("*Sexo é um campo obrigatório!");

                                }else{
                                    if(request.getParameter("cpf").isEmpty()){

                                        throw new Exception("*CPF é um campo obrigatório!");

                                    }else{
                                        if(request.getParameter("rg").isEmpty()){

                                            throw new Exception("*RG é um campo obrigatório!");

                                        }else{
                                            if(request.getParameter("nasc").isEmpty()){

                                                throw new Exception("*Data de Nascimento é um campo obrigatório!");

                                            }else{
                                                if(request.getParameter("logradouro").isEmpty()){

                                                   throw new Exception("*Logradouro é um campo obrigatório!");

                                                }else{
                                                    if(request.getParameter("numero").isEmpty()){

                                                        throw new Exception("*Número é um campo obrigatório!");

                                                    }else{
                                                        if(request.getParameter("cep").isEmpty()){

                                                            throw new Exception("*CEP é um campo obrigatório!");

                                                        }else{
                                                            if(request.getParameter("bairro").isEmpty()){

                                                                throw new Exception("*Bairro é um campo obrigatório!");

                                                            }else{
                                                                if(request.getParameter("cidade").isEmpty()){

                                                                    throw new Exception("*Cidade é um campo obrigatório!");

                                                                }else{
                                                                    if(request.getParameter("estado").isEmpty()){

                                                                        throw new Exception("*Estado é um campo obrigatório!");

                                                                    }else{
                                                                        if(request.getParameter("cinema").isEmpty()){

                                                                            throw new Exception("*Cinema Favorito é um campo obrigatório!");

                                                                        }else{
                                                                            if(request.getParameter("genero").isEmpty()){

                                                                                throw new Exception("*Gênero Favorito é um campo obrigatório!");

                                                                            }else{


                                                                                String senha1 = request.getParameter("senha1");
                                                                                String senha2 = request.getParameter("senha2");

                                                                                if(senha1.isEmpty() || senha2.isEmpty()){

                                                                                    destino = "cliente.do?cmd=buscar";
                                                                                    throw new Exception("*Campo senha é obrigatório!");

                                                                                }else if(!senha1.equals(senha2)){

                                                                                    destino = "cliente.do?cmd=buscar";
                                                                                    throw new Exception("*As senhas digitadas não conferem!");

                                                                                }else{
                                                                                    
                                                                                    Endereco endereco = new Endereco();

                                                                                    endereco.setLogradouro(request.getParameter("logradouro"));
                                                                                    endereco.setNumero(request.getParameter("numero"));
                                                                                    endereco.setComplemento(request.getParameter("complemento"));
                                                                                    endereco.setCep(request.getParameter("cep"));
                                                                                    endereco.setBairro(request.getParameter("bairro"));
                                                                                    endereco.setCidade(request.getParameter("cidade"));
                                                                                    endereco.setEstado(request.getParameter("estado"));

                                                                                    Endereco end = ed.pesquisarEndereco(endereco);

                                                                                    String data = request.getParameter("nasc");

                                                                                    String vetor[] = data.split("/");
                                                                                    Date datanasc = new Date(vetor[1]+"/"+vetor[0]+"/"+vetor[2]);

                                                                                    Usuario u = new Usuario();

                                                                                    u.setEndereco(new Endereco());

                                                                                    u.setNome(request.getParameter("nome"));
                                                                                    u.setSexo(request.getParameter("sexo"));
                                                                                    u.setDataNascimento(datanasc);
                                                                                    u.setCpf(request.getParameter("cpf"));
                                                                                    u.setRg(request.getParameter("rg"));
                                                                                    u.setEmail(request.getParameter("email"));
                                                                                    u.setSenha(request.getParameter("senha1"));
                                                                                    u.setPerfil(Integer.parseInt(request.getParameter("perfil")));
                                                                                    u.setIdUsuario(Integer.parseInt(request.getParameter("idusuario")));
                                                                                    u.setSituacao(Integer.parseInt(request.getParameter("situacao")));
                                                                                    u.getEndereco().setLogradouro(request.getParameter("logradouro"));
                                                                                    u.getEndereco().setNumero(request.getParameter("numero"));
                                                                                    u.getEndereco().setComplemento(request.getParameter("complemento"));
                                                                                    u.getEndereco().setCep(request.getParameter("cep"));
                                                                                    u.getEndereco().setBairro(request.getParameter("bairro"));
                                                                                    u.getEndereco().setCidade(request.getParameter("cidade"));
                                                                                    u.getEndereco().setEstado(request.getParameter("estado"));

                                                                                    if(end!=null){

                                                                                        u.getEndereco().setIdEndereco(end.getIdEndereco());

                                                                                    }else{

                                                                                        Endereco ende = ed.salvar(u.getEndereco());

                                                                                        u.getEndereco().setIdEndereco(ende.getIdEndereco());

                                                                                    }

                                                                                   Usuario usuario = ud.alterar(u);

                                                                                   Cliente c = new Cliente();

                                                                                   c.setGenero(new Genero());
                                                                                   c.setCinema(new Cinema());
                                                                                   c.setUsuario(new Usuario());

                                                                                   c.getCinema().setIdCinema(Integer.parseInt(request.getParameter("cinema")));
                                                                                   c.getGenero().setIdGenero(Integer.parseInt(request.getParameter("genero")));
                                                                                   c.getUsuario().setIdUsuario(usuario.getIdUsuario());
                                                                                   c.setIdCliente(Integer.parseInt(request.getParameter("idcliente")));

                                                                                   cd.alterar(c);
                                                                                   Usuario us = (Usuario) request.getSession().getAttribute("sessao");

                                                                                   if(us!=null){

                                                                                       if(us.getPerfil().equals(1)){
                                                                                            session.setAttribute("sessao", u);
                                                                                            destino = "filme.do?cmd=home";
                                                                                       }
                                                                                       if(us.getPerfil().equals(2)){
                                                                                            destino = "cliente.do?cmd=listar";
                                                                                       }
                                                                                       if(us.getPerfil().equals(3)){
                                                                                            destino = "cliente.do?cmd=listar";
                                                                                       }
                                                                                   }
                     
                                                                                   request.setAttribute("mensagem", "*Dados atualizados com sucesso.");

                                                                               }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                }catch (Exception exc){

                    request.setAttribute("mensagem", exc.getMessage());

                }finally{

                    request.getRequestDispatcher(destino).forward(request, response);

                }
            }

            if(cmd.equals("form")){

                GeneroDao gd = null;
                CinemaDao cd = null;

                String destino = "cadastro_cliente.jsp";
                HttpSession session = request.getSession(true);

                Usuario u = (Usuario) request.getSession().getAttribute("sessao");

                if(u!=null){

                    if(u.getPerfil().equals(1)){
                        destino = "cliente/alterar_cliente.jsp";
                    }
                    if(u.getPerfil().equals(2)){
                        destino = "funcionario/cadastro_cliente.jsp";
                    }
                    if(u.getPerfil().equals(3)){
                        destino = "admin/cadastro_cliente.jsp";
                    }

                }

                try{

                    gd = new GeneroDao();
                    cd = new CinemaDao();

                    request.setAttribute("generos", gd.BuscarTodosGeneros());
                    request.setAttribute("cinemas", cd.buscarTodos());

                }catch (Exception e){

                    request.setAttribute("mensagem", e.getMessage());

                }finally{

                    request.getRequestDispatcher(destino).forward(request, response);

                }
            }

            if (cmd.equals("excluir")){

                    UsuarioDao ud = new UsuarioDao();

                    String destino = "index.jsp";
                    HttpSession session = request.getSession(true);

                    Usuario us = (Usuario) request.getSession().getAttribute("sessao");

                    if(us!=null){

                        if(us.getPerfil().equals(1)){
                            destino = "filme.do?cmd=home";
                        }
                        if(us.getPerfil().equals(2)){
                            destino = "cliente.do?cmd=listar";
                        }
                        if(us.getPerfil().equals(3)){
                            destino = "cliente.do?cmd=listar";
                        }

                    }

                    try{

                            Usuario u = new Usuario();

                            u.setIdUsuario(Integer.parseInt(request.getParameter("id")));

                            ud.excluir(u);


                            request.setAttribute("mensagem", "Cliente desativado com sucesso.");

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

                }
        }
            

       
    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }

}
